package com.listeningframework.boot.codegen.generators;

import com.listeningframework.boot.codegen.context.Context;
import com.listeningframework.boot.codegen.context.EntityContext;
import com.listeningframework.boot.codegen.context.ModuleContext;
import com.listeningframework.boot.codegen.exception.CodeGenException;
import com.listeningframework.boot.codegen.generators.coders.EntityCoder;
//import com.listeningframework.boot.codegen.generators.coders.EntityCoder;

/**
 * @author lixining
 * @version $Id: GeneratorFactory.java, v 0.1 2016年12月1日 下午7:38:39 lixining Exp $
 */
public class GeneratorFactory {

    public static GeneratorFactory newinstance() {
        return new GeneratorFactory();
    }

    public void generate() throws CodeGenException {
        Context context = Context.getContext();
        ModuleContext moduleContext = context.getModuleContext();
        if (!moduleContext.existsEntities() || !moduleContext.isEnabled()) {
            return;
        }
        for (EntityContext entityContext : moduleContext.getEntityContextList()) {
            if (entityContext == null || !entityContext.isEnabled()) {
                continue;
            }
            generateSrc(entityContext);
        }
    }

    /**
     * 生成CodeGenEntity源码文件
     *
     * @throws CodeGenException 生成异常
     */
    private void generateSrc(EntityContext entityContext) throws CodeGenException {
        // 1. Entity
        new EntityCoder(entityContext).generate();
//        // 4. Domain
//        new ModelCoder(context).writeSrc();
//        // 1. Controller
//        new ControllerCoder(entityContext).writeSrc();
//        // 2. Service
//        new ServiceCoder(context).writeSrc();
//        // 5. Repository
//        new RepositoryCoder(context).writeSrc();
//        // 6. Mapper
//        new MapperCoder(context).writeSrc();
    }

}
